package com.nicho.service;

import java.util.ArrayList;

import com.nicho.dao.SRootDAO;
import com.nicho.pojo.Course;
import com.nicho.pojo.SRoot;
import com.nicho.pojo.Student;
import com.nicho.pojo.Teacher;

/*
 * @Author: 姜东浩
 * @Date: 2021-11-10 6:50:36
 * @LastEditors: 姜东浩
 * @LastEditTime: 2021-11-16 09:49:37
 * @Description: 管理员业务类
 */
public class SRootService {

    private SRootDAO sRootDAO = new SRootDAO();

    /**
     * @description:管理员登录业务
     * @param sRoot 被检查的管理员对象
     * @return 管理员对象
     * @author: 姜东浩
     */
    public SRoot sRootLogin(SRoot sRoot) {

        return sRootDAO.sRootLogin(sRoot);

    }

    // ========================================================================================================================
    /**
     * @description: 根据学号判断数据库中是否有此的学生对象
     * @param student 待判断的学生对象
     * @return 有此对象返回数据库中的学生对象，没有返回null
     * @author: 姜东浩
     */
    public Student existStudent(Student student) {

        return sRootDAO.existStudent(student);

    }

    /**
     * @description: 向数据库中添加一名学生
     * @param student 待添加的学生
     * @return 添加操作结束后的提示信息
     * @author: 姜东浩
     */
    public String insertOneStudent(Student student) {

        if (sRootDAO.insertOneStudent(student) == 1) {
            return "添加学生成功!";
        } else {
            return "添加学生失败!";
        }

    }

    /**
     * @description: 删除一名学生
     * @param {Long} studentId
     * @return 删除成功返回1，失败返回-1
     * @author: 姜东浩
     */
    public String deleteOneStudent(Student student) {

        if (sRootDAO.subtractOneInPsum(student) != -3) {
            if (sRootDAO.deleteOneStudentInTSL(student.getStudentId()) !=-3) {
                if (sRootDAO.deleteOneStudentInASL(student.getStudentId()) == 1) {
                    return "删除成功";
                } else {
                    return "课程已报人数减一成功，教师列表中删除成功，在学生总表中删除失败";
                }
            } else {
                return "课程已报人数减一成功，在教师列表中不知道咋的了，出问题了";
            }
        } else {
            return "删除一名学生失败，因为课程已报人数减一失败";
        }

    }

    /**
     * @description: 修改学生密码
     * @param {Long}   studentId 学生账号
     * @param {String} password 更改后的密码
     * @return 修改操作结束后的提示信息
     * @author: 姜东浩
     */
    public String changeStudentPwd(String studentId, String password) {

        if (sRootDAO.changeStudentPwd(studentId, password) == 1) {
            return "修改学生密码成功!";
        } else {
            return "修改学生密码失败!";
        }

    }

    /**
     * @description: 显示所有学生列表
     * @author: 姜东浩
     */
    public ArrayList<Student> showALlStudents() {

        return sRootDAO.showALlStudents();

    }

    // ========================================================================================================================
    /**
     * @description: 判断是否有此教师
     * @param {Teacher} teacher
     * @return 有返回数据库中的此对象，没有返回null
     * @author: 姜东浩
     */
    public Teacher existTeacher(Teacher teacher) {

        return sRootDAO.existTeacher(teacher);

    }

    /**
     * @description: 添加一名教师
     * @param {Teacher} teacher
     * @return 添加操作结束后返回的提示信息
     * @author: 姜东浩
     */
    public String insertOneTeacher(Teacher teacher) {

        if (sRootDAO.insertOneTeacher(teacher) == 1) {
            return "添加教师成功!";
        } else {
            return "添加教师失败!";
        }

    }

    /**
     * @description: 删除一名教师
     * @param {Teacher} teacher
     * @return 删除操作结束后返回的提示信息
     * @author: 姜东浩
     */
    public String deleteOneTeacher(Teacher teacher) {

        if (sRootDAO.setOneCourseTeacherNULL(teacher.gettCourseId()) != -3) {
            if (sRootDAO.deleteOneTeacherInCT(teacher.getTeacherId()) != -3) {
                if (sRootDAO.deleteOneTeacherInATL(teacher.getTeacherId()) == 1) {
                    return "将改门课程的讲师在所有学生课程List中设为null成功，在教师总表中删除成功，将对应课程讲师设置为null成功";
                } else {
                    return "将改门课程的讲师在所有学生课程List中设为null成功，将对应课程讲师设置为null成功，在教师总表中删除失败";
                }
            } else {
                return "将改门课程的讲师在所有学生课程List中设为null成功，将对应课程讲师设置为null时抛出异常";
            }
        } else {
            return "将改门课程的讲师在所有学生课程List中设为null失败";
        }

    }

    /**
     * @description: 设置一名老师教一门课程
     * @param {Teacher} teacher
     * @param {Course}  course
     * @return 返回操作后提示信息
     * @author: 姜东浩
     */
    public String toTeachOneCourse(Teacher teacher, Course course) {

        if (sRootDAO.existTeacher(teacher) == null) {
            return "没有此编号的教师，创建失败";
        }
        if (sRootDAO.existTeacherHasCourse(teacher.getTeacherId()) == 1) {
            return "此老师正在教其他科目，创建失败";
        }
        if (sRootDAO.existTeacherHasCourse(teacher.getTeacherId()) == -1) {
            return "出现异常，创建失败";
        }
        if (sRootDAO.existCourseHasTeacher(course) == -2) {
            return "查看课程是否有讲师抛出异常";
        }
        if (sRootDAO.existCourseHasTeacher(course) == 1) {
            return "此课程已有讲师，设置失败";
        }
        if (sRootDAO.setTeacherNewCourseId(course, teacher) == 1) {
            if (sRootDAO.findOneCourseInALLSCourseList(course) != null) {
                if (sRootDAO.addStudentListToTeacher(teacher, sRootDAO.findOneCourseInALLSCourseList(course)) == 1) {
                    if (sRootDAO.setCTeacherInCourse(course, teacher) == 1) {
                        return "添加成功";
                    } else {
                        return "给课程设置任课教师失败";
                    }
                } else {
                    return "向老师管理的学生集合中添加选了该课程的学生失败";
                }
            } else {
                return "查找指定课程有多少学生选抛出异常";
            }
        } else {
            return "设置该老师的课程ID失败";
        }

    }

    /**
     * @description: 修改教师密码
     * @param {Long}   teacherId
     * @param {String} password
     * @return 修改操作后的提示信息
     * @author: 姜东浩
     */
    public String changeTeacherPwd(String teacherId, String password) {

        if (sRootDAO.changeTeacherPwd(teacherId, password) == 1) {
            return "修改教师密码成功!";
        } else {
            return "修改教师密码失败!";
        }

    }

    /**
     * @description: 显示所有教师列表
     * @return 所有教师列表
     * @author: 姜东浩
     */
    public ArrayList<Teacher> showALlTeachers() {

        return sRootDAO.showALlTeachers();

    }

    // ========================================================================================================================
    /**
     * @description:通过课程编号判断是否有此课程
     * @param {String} courseId
     * @return 有返回课程对象，没有返回null
     * @author: 姜东浩
     */
    public Course existCourseById(String courseId) {

        return sRootDAO.existCourseById(courseId);

    }

    /**
     * @description: 新增课程
     * @param {Course} course
     * @return 返回操作后提示信息
     * @author: 姜东浩
     */
    public String insertOneCourse(Course course) {

        if (sRootDAO.existCourseById(course.getCourseId()) != null) {
            return "数据库中有此编号的课程，创建失败";
        }
        if (sRootDAO.existTeacher(course.getcTeacher()) == null) {
            return "没有此编号的教师，创建失败";
        }
        if (sRootDAO.existTeacherHasCourse(course.getcTeacher().getTeacherId()) == 1) {
            return "此老师正在教其他科目，创建失败";
        }
        if (sRootDAO.existTeacherHasCourse(course.getcTeacher().getTeacherId()) == -1) {
            return "出现异常，创建失败";
        }
        if (sRootDAO.setTeacherNewCourseId(course) == 1) {
            if (sRootDAO.insertOneCourseInACL(course) == 1) {
                return "创建成功";
            } else {
                return "在课程总表添加课程失败";
            }
        } else {
            return "设置该教师所教的科目失败";
        }

    }

    /**
     * @description: 删除一门课程
     * @param {Course} course
     * @return 删除后的信息
     * @author: 姜东浩
     */
    public String removeOneCourse(Course course) {
        if (course.getcTeacher() != null) {
            if (sRootDAO.removeTeacherNewCourseId(course.getcTeacher().getTeacherId()) != -3) {
                if (sRootDAO.removeTStudentList(course.getcTeacher().getTeacherId()) != -3) {
                    if (sRootDAO.removeCourseInsCourseList(course) != -3) {
                        if (sRootDAO.deleteOneCourse(course) != -3) {
                            return "移除成功";
                        } else {
                            return "已将教这门课的老师的授课信息设置为null，已在老师管理的学生List设null，在学生List删除这门课，deleteOneCourse抛出异常，在课程总表删除这门课失败";

                        }
                    } else {
                        return "已将教这门课的老师的授课信息设置为null，已在老师管理的学生List设null，removeCourseInsCourseList抛出异常，在学生List删除这门课失败";
                    }
                } else {
                    return "已将教这门课的老师的授课信息设置为null，removeTStudentList抛出异常，在老师管理的学生List设null失败";
                }

            } else {
                return "removeTeacherNewCourseId抛出异常，将教这门课的老师的授课信息设置为null失败";
            }
        } else {
            if (sRootDAO.removeCourseInsCourseList(course) != -3) {
                if (sRootDAO.deleteOneCourse(course) != -3) {
                    return "移除成功";
                } else {
                    return "已将教这门课的老师的授课信息设置为null，已在老师管理的学生List设null，在学生List删除这门课，deleteOneCourse抛出异常，在课程总表删除这门课失败";

                }
            } else {
                return "已将教这门课的老师的授课信息设置为null，已在老师管理的学生List设null，removeCourseInsCourseList抛出异常，在学生List删除这门课失败";
            }
        }

    }

    /**
     * @description: 显示所有课程列表
     * @author: 姜东浩
     */
    public ArrayList<Course> showALlCourses() {

        return sRootDAO.showALlCourses();

    }

    // ========================================================================================================================
    /**
     * @description: 修改自己的密码
     * @param {String} password
     * @return 操作成功返回1，失败返回-1
     * @author: 姜东浩
     */
    public int changeMyPwd(String password) {
        if (sRootDAO.changeMyPwd(password) == 1) {
            return 1;
        } else {
            return -1;
        }
    }

}